package mqigdcom.mqigd.utils;

import android.content.Context;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Environment;
import android.text.TextUtils;
import android.webkit.CookieManager;

import mqigdcom.mqigd.Const;

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.net.URLDecoder;

/**
 * 通用工具类
 */
public class Utils {

    /**
     * 判断网络是否可用
     *
     * @param context 上下文对象
     * @return true 有网络连接，false 网络不可用
     */
    public static boolean isNetworkAvailable(Context context) {
        if (context != null) {
            ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            if (manager != null) {
                NetworkInfo info = manager.getActiveNetworkInfo();
                if (info != null) {
                    return info.isAvailable();
                }
            }
        }
        return false;
    }

    /**
     * 利用反射获取状态栏高度
     *
     * @return 像素值
     */
    public static int getStatusBarHeight(Context context) {
        int result = 0;
        //获取状态栏高度的资源id
        int resourceId = context.getResources().getIdentifier("status_bar_height", "dimen", "android");
        if (resourceId > 0) {
            result = context.getResources().getDimensionPixelSize(resourceId);
        }
        return result;
    }

    /**
     * 根据手机分辨率从DP转成PX
     *
     * @param context
     * @param dpValue
     * @return
     */
    public static int dip2px(Context context, float dpValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (dpValue * scale + 0.5f);
    }

    /**
     * 根据手机的分辨率PX(像素)转成DP
     *
     * @param context
     * @param pxValue
     * @return
     */
    public static int px2dip(Context context, float pxValue) {
        float scale = context.getResources().getDisplayMetrics().density;
        return (int) (pxValue / scale + 0.5f);
    }

//    /**
//     * 设置状态栏的颜色
//     *
//     * @param activity 当前Activity界面
//     * @param color    颜色值
//     */
//    public static void setStatusBarColor(Activity activity, int color) {
//        if (activity != null && !activity.isFinishing()) {
//            Window window = activity.getWindow();
//            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {// Android 5.0.1及以上
//                if (window.getStatusBarColor() != color) {
//                    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
//                    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
//                    window.setStatusBarColor(color);
//                }
//            }
//        }
//    }

    /**
     * 获取App的版本名称
     *
     * @param context Context上下文
     */
    public static String getVersionName(Context context) {
        if (context != null) {
            try {
                PackageInfo packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(), 0);
                return packageInfo.versionName;
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 检测字符串是否为空，防止空指针
     *
     * @param str 字符串
     * @return 若为空，则返回空串
     */
    public static String checkNull(String str) {
        return str == null ? "" : str;
    }

    /**
     * 检测屏幕当前的方向
     *
     * @param context 上下文对象
     * @return true 表示竖屏；false 表示横屏
     */
    public static boolean checkScreenOrientation(Context context) {
        if (context != null) {
            Configuration configuration = context.getResources().getConfiguration(); //获取设置的配置信息
            return configuration.orientation != Configuration.ORIENTATION_LANDSCAPE;
        }
        return true;
    }

    /**
     * 根据域名，获取key键对应的值
     *
     * @param domain 键值对儿存储的域名
     * @param key    键名
     * @return 返回对应域名下的key键对应的值
     */
    public static String getCookieByDomain(String domain, String key) {
        String data = CookieManager.getInstance().getCookie(domain);
        if (TextUtils.isEmpty(data) || TextUtils.isEmpty(key)) {
            return null;
        }
        String[] arrCookies = data.split("; ");
        for (int i = 0, count = arrCookies.length; i < count; i++) {
            try {
                String[] cookie = URLDecoder.decode(arrCookies[i], "utf-8").split("=");
                if (cookie.length >= 2 && key.equalsIgnoreCase(cookie[0])) {
                    return cookie[1];
                }
            } catch (UnsupportedEncodingException e) {
                e.printStackTrace();
            }
        }
        return null;
    }

    /**
     * 根据采集的分类，获取对应的病害信息
     *
     * @param type 采集的分类
     * @return
     */
    public static String[] getDssTypeByType(String type) {
        if ("SCI".equals(type)) {
            return Const.DSS_TYPE_SCI;
        } else if ("LQ".equals(type)) {
            return Const.DSS_TYPE_LQ;
        } else if ("BCI".equals(type)) {
            return Const.DSS_TYPE_BCI;
        } else if ("TCI".equals(type)) {
            return Const.DSS_TYPE_TCI;
        } else if ("SN".equals(type)) {
            return Const.DSS_TYPE_SN;
        }
        return null;
    }

    /**
     * 获取外部存储卡的保存路径
     *
     * @return 以“/”结尾的路径字符串
     */
    public static String getExternalSavedPath() {
        if (Environment.MEDIA_MOUNTED.equals(Environment.getExternalStorageState())) {
            return Environment.getExternalStorageDirectory().getPath() + "/mqisys/";
        }
        return null;
    }

    /**
     * 将字符串保存到文件
     *
     * @param context  上下文对象
     * @param text     字符串文本
     * @param fileName 保存的文件名
     */
    public static void saveTextToFile(Context context, String text, String fileName) {
        if (context == null) {
            return;
        }
        File file = new File(context.getFilesDir(), fileName != null ? fileName : System.currentTimeMillis() + ".txt");
        BufferedOutputStream bos = null;
        try {
            if (file.exists() && !file.delete()) {
                return;
            }
            if (!file.createNewFile()) {
                return;
            }
            bos = new BufferedOutputStream(new FileOutputStream(file));
            bos.write(text.getBytes());
            bos.flush();
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}
